package com.silence.springboot.convert;

import com.silence.springboot.entity.RoleEntity;
import com.silence.springboot.vo.input.AddRoleInput;
import com.silence.springboot.vo.input.PageRolesInput;
import com.silence.springboot.vo.input.UpdateRoleInput;
import com.silence.springboot.vo.output.PageRolesOutput;
import com.silence.springboot.vo.output.RoleOutput;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 权限表 转换器接口。
 */
@Component
@Mapper(componentModel = "spring")
public interface RoleConvert {

    /**
     * 将权限表实体类转换为权限输出视图
     *
     * @param roleEntity 权限表实体类
     * @return 权限输出视图
     */
    RoleOutput roleEntityToRoleOutput(RoleEntity roleEntity);

    /**
     * 将权限表实体类转换为权限输出视图
     *
     * @param entityList 权限表实体类
     * @return 权限输出视图
     */
    List<RoleOutput> toRoleOutputList(List<RoleEntity> entityList);

    /**
     * 将分页查询权限表入参转换为权限表实体类
     *
     * @param rolesInput 分页查询权限表入参
     * @return 权限表实体类
     */
    RoleEntity pageRolesInputToRoleEntity(PageRolesInput rolesInput);

    /**
     * 将权限表实体类转换为分页查询权限表出参
     *
     * @param roleEntity 权限表实体类
     * @return 分页查询权限表出参
     */
    @Mapping(source = "createTime", target = "createTime", dateFormat = "yyyy-MM-dd HH:mm:ss")
    @Mapping(source = "updateTime", target = "updateTime", dateFormat = "yyyy-MM-dd HH:mm:ss")
    PageRolesOutput roleEntityToPageRolesOutput(RoleEntity roleEntity);

    /**
     * 将权限表实体类转换为分页查询权限表出参
     *
     * @param roleEntityList 权限表实体类
     * @return 分页查询权限表出参
     */
    List<PageRolesOutput> roleEntityListToPageRolesOutputList(List<RoleEntity> roleEntityList);

    /**
     * 将新增权限表入参转换为权限表实体类
     *
     * @param input 新增权限表入参
     * @return 权限表实体类
     */
    RoleEntity addRoleInputToRoleEntity(AddRoleInput input);

    /**
     * 将更新权限表入参转换为权限表实体类
     *
     * @param input 更新权限表入参
     * @return 权限表实体类
     */
    RoleEntity updateRoleInputToRoleEntity(UpdateRoleInput input);
}
